package com.wxdc.nmgyt.nmgytwydc.greendao.ope;

import android.content.Context;
import android.util.Log;

import com.wxdc.nmgyt.nmgytwydc.greendao.PdYfInfoBeanDao;
import com.wxdc.nmgyt.nmgytwydc.greendao.manager.DbManager;
import com.wxdc.nmgyt.nmgytwydc.model.PdYfInfoBean;
import com.wxdc.nmgyt.nmgytwydc.model.PdYfWzInfoBean;

import org.greenrobot.greendao.query.QueryBuilder;

import java.util.List;

/**
 * Created by Administrator on 2018/8/27.
 */

public class PdYfInfoBeanDaoOpe {
    //===================================insert======================================================

   /* *
     * 添加数据至数据库
     *
     * @param context
     * @param bean*/

    public static void insertData(Context context, PdYfInfoBean bean) {
        DbManager.getDaoSession(context).getPdYfInfoBeanDao().insert(bean);
        int len = bean.getFREQUENCYWZ().size();
        for (int i = 0; i < len; i++) {
            PdYfWzInfoBean wzInfoBean = bean.getFREQUENCYWZ().get(i);
            wzInfoBean.setPdyfInfoId(bean.getId());
            DbManager.getDaoSession(context).getPdYfWzInfoBeanDao().insert(wzInfoBean);
        }
    }

    /*  *
       * 添加数据至数据库，如果存在，将原来的数据覆盖
       * 内部代码判断了如果存在就update(entity);不存在就insert(entity)；
       * (save 类似于insertOrReplace，区别在于save会判断传入对象的key，有key的对象执行更新，无key的执行插入。当对象有key但并不在数据库时会执行失败.适用于保存本地列表)
       *
       * @param context
       * @param bean    结论
       *                在确保插入数据有key时必须存在于数据库的情况下，适用save更高效。其他情况一律适用insertOrReplace
  */
    public static void saveData(Context context, PdYfInfoBean bean) {
        DbManager.getDaoSession(context).getPdYfInfoBeanDao().save(bean);
        int len = bean.getFREQUENCYWZ().size();
        Log.i("TAG", "saveData: -------------->" + len + "=---------->" + bean.toString());
        for (int i = 0; i < len; i++) {
            PdYfWzInfoBean wzInfoBean = bean.getFREQUENCYWZ().get(i);
            wzInfoBean.setPdyfInfoId(bean.getId());
            DbManager.getDaoSession(context).getPdYfWzInfoBeanDao().save(wzInfoBean);
        }
    }

  /*  *
     * 传入的对象在数据库中，有则更新无则插入。推荐同步数据库时使用该方法
     *
     * @param context
     * @param bean*/

    public static void insertOrReplace(Context context, PdYfInfoBean bean) {
        DbManager.getDaoSession(context).getPdYfInfoBeanDao().insertOrReplace(bean);
        int len = bean.getFREQUENCYWZ().size();
        for (int i = 0; i < len; i++) {
            PdYfWzInfoBean wzInfoBean = bean.getFREQUENCYWZ().get(i);
            wzInfoBean.setPdyfInfoId(bean.getId());
            DbManager.getDaoSession(context).getPdYfWzInfoBeanDao().insertOrReplace(wzInfoBean);
        }
    }
    //========================================delete=================================================

   /* *
     * 删除数据至数据库
     *
     * @param context
     * @param bean    删除具体内容*/

    public static void deleteData(Context context, PdYfInfoBean bean) {
        DbManager.getDaoSession(context).getPdYfInfoBeanDao().delete(bean);
        int len = bean.getFREQUENCYWZ().size();
        for (int i = 0; i < len; i++) {
            PdYfWzInfoBean wzInfoBean = bean.getFREQUENCYWZ().get(i);
            wzInfoBean.setPdyfInfoId(bean.getId());
            DbManager.getDaoSession(context).getPdYfWzInfoBeanDao().delete(wzInfoBean);
        }
    }


   /* *
     * 根据实体删除
     *
     * @param context
     * @param entitys*/

    public static void deleteInTx(Context context, List<PdYfInfoBean> entitys) {
        DbManager.getDaoSession(context).getPdYfInfoBeanDao().deleteInTx(entitys);
        int len = entitys.size();
        for (int i = 0; i < len; i++) {
            DbManager.getDaoSession(context).getPdYfWzInfoBeanDao().deleteInTx(entitys.get(i).getFREQUENCYWZ());
        }

    }

   /* *
     * 删除全部数据
     *
     * @param context*/

    public static void deleteAllData(Context context) {
        DbManager.getDaoSession(context).getPdYfInfoBeanDao().deleteAll();
    }
    //===========================================update==================================================

    /*  *
       * 更新数据库
       *
       * @param context
       * @param bean
       */
    public static void updateData(Context context, PdYfInfoBean bean) {
        DbManager.getDaoSession(context).getPdYfInfoBeanDao().update(bean);
        int len = bean.getFREQUENCYWZ().size();
        List<PdYfWzInfoBean> localExistWzInfos = PdYfWzInfoBeanDaoOpe.queryAllForCbyfId(context, bean.getId());
        PdYfWzInfoBeanDaoOpe.deleteInTx(context, localExistWzInfos);
        for (int i = 0; i < len; i++) {
            bean.getFREQUENCYWZ().get(i).setPdyfInfoId(bean.getId());
            PdYfWzInfoBeanDaoOpe.saveData(context, bean.getFREQUENCYWZ().get(i));

        }
        Log.i("TAG", "updateData: -------更新之前----------" + bean.toString() + "------" + len + "---更新之后---" + PdYfWzInfoBeanDaoOpe.queryAllForCbyfId(context, bean.getId()).toString());
    }
    //==========================================query==================================================

   /* *
     * 查询当前样地下的频度样方
     *
     * @param context
     * @return*/

    public static PdYfInfoBean queryAllForParam(Context context, String grassid) {
        DbManager.getDaoSession(context).clear();
        QueryBuilder<PdYfInfoBean> builder = DbManager.getDaoSession(context).getPdYfInfoBeanDao().queryBuilder();
        PdYfInfoBean bean = builder.where(PdYfInfoBeanDao.Properties.GRASSID.eq(grassid)).unique();
        if (bean != null) {
            bean.getFREQUENCYWZ();
        }
        return bean;
    }
    //===============================================================================================
}
